package vip.xiaonuo.license;

import cn.hutool.core.io.resource.ClassPathResource;
import com.locker.modules.sys.license.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;


import java.util.HashMap;
import java.util.Map;

/**
 * 在项目启动时安装证书
 *
 * @author zifangsky
 * @date 2018/4/24
 * @since 1.0.0
 */
@Component
@Slf4j
public class LicenseCheckListener implements ApplicationListener<ContextRefreshedEvent> {

  /**
   * 证书subject
   */
  @Value("${license.subject}")
  private String subject;

  /**
   * 公钥别称
   */
  @Value("${license.publicAlias}")
  private String publicAlias;

  /**
   * 访问公钥库的密码
   */
  @Value("${license.storePass}")
  private String storePass;

  /**
   * 证书生成路径
   */
  private String licensePath = "C:/license.lic";


  /**
   * 密钥库存储路径
   */
  private String publicKeysStorePath = System.getProperty("user.dir") + "/publicCerts.keystore";

  @Override
  public void onApplicationEvent(ContextRefreshedEvent event) {
    ApplicationContext context = event.getApplicationContext().getParent();
    if (context == null) {
      if (StringUtils.isNotBlank(licensePath)) {
        log.info("++++++++ 开始安装证书 ++++++++");
        LicenseVerifyParam param = new LicenseVerifyParam();
        param.setSubject(subject);
        param.setPublicAlias(publicAlias);
        param.setStorePass(storePass);
        param.setLicensePath(licensePath);
        param.setPublicKeysStorePath(publicKeysStorePath);
        LicenseVerify licenseVerify = new LicenseVerify();
        //安装证书
        licenseVerify.install(param);
        log.info("++++++++ 证书安装结束 ++++++++");
      }
    }
  }
}
